#ifndef FAVORITEHUBSAVER_H
#define FAVORITEHUBSAVER_H

#include <QObject>
#include <QHash>
#include "singleton.h"

namespace FavHubModif {
typedef QHash<QString, QString> Param;
typedef QHashIterator<QString, QString> ParamIterator;
typedef QHash<QString, Param> HubsParam;
typedef QHashIterator<QString, Param> HubsParamIterator;

const QString userdescription = "userdescription";
const QString name            = "name";
const QString server          = "server";
const QString description     = "description";
const QString password        = "password";
const QString encoding        = "encoding";
const QString group           = "group";
const QString nick            = "nick";
}

/** Изменяет сохранённые значения параметров избранных хабов.
 *
 * Сперва накапливает значения с помощью метода add(), а затем
 * сохраняет с помощью метода save(const QString & URL).
 */
class FavoriteHubModifer : public QObject, public Singleton<FavoriteHubModifer>{
    Q_OBJECT
public:
    explicit FavoriteHubModifer(QObject *parent = 0);

    /** Добавить новое значение параметра для указанного избранного хаба.
     *
     * @param URL Адрес хаба является его ID. Если меняется адрес хаба, хаб остаётся привязанным к старому адресу да возова метода save(QString URL).
     * @param name Имя изменяемого параметра.
     * @param value Новое значение параметра.
     */
    void add(const QString & URL, const QString & name, const QString &value);

    /** Применить все изменённые значения для указанного хаба
 *
 * @param URL Адрес хаба является его ID. Если меняется адрес хаба, хаб остаётся привязанным к старому адресу до вызова метода save(const QString & URL)
 */
    void save(const QString & URL);
signals:
    
public slots:
private:
    FavHubModif::HubsParam m_hubsparam;
};

#endif // FAVORITEHUBSAVER_H
